package org.popupcommunication.service.impl;

import java.util.List;

import org.popupcommunication.dao.GroupDAO;
import org.popupcommunication.dao.SujetForumDAO;
import org.popupcommunication.dao.UserDAO;
import org.popupcommunication.model.Group;
import org.popupcommunication.model.ResponseForum;
import org.popupcommunication.model.SujetForum;
import org.popupcommunication.model.User;
import org.popupcommunication.service.GroupManager;
import org.popupcommunication.service.ResponseForumManager;
import org.popupcommunication.service.SujetForumManager;
import org.popupcommunication.service.UserManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.Errors;

@Transactional
public class SujetForumManagerBean implements SujetForumManager{
	private SujetForumDAO sujetForumRepository;
	@Autowired
	ResponseForumManager responseForumService;
	@Autowired
	GroupManager groupService;
	@Autowired
	UserManager userService;
	@Autowired 
	GroupDAO groupRepository;
	@Autowired
	UserDAO userRepository;
	
	
	public SujetForumDAO getSujetForumRepository() {
		return sujetForumRepository;
	}

	public void setSujetForumRepository(SujetForumDAO sujetForumRepository) {
		this.sujetForumRepository = sujetForumRepository;
	}

	@Override
	public List<SujetForum> getAllSujets(Group g) {
		return sujetForumRepository.getListSujets(g);
	}
	
	@Override
	public boolean add(SujetForum sujet, Errors errors) {
        boolean valid = !errors.hasErrors();
        if (valid){
        	User u = userRepository.findById(sujet.getCreateur().getIdUser());
        	Group g = groupService.findByName(sujet.getForum().getName());
//        	System.out.println("on tente de persister");
//        	System.out.println("**************************");
//        	System.out.println("sujet to string "+sujet);
//        	System.out.println("sujet user id "+sujet.getCreateur().getIdUser());

        	u.addSujet(sujet);        	
        	g.addSujet(sujet);
        	sujet.setCreateur(u);
        	sujet.setForum(g);
        	if ((u !=null) && (g!=null))
        		{
        		sujetForumRepository.add(sujet);
        		}
        	else
        		System.out.println("pas fait le persist");  	
        }      
		return valid;
	}

	@Override
	public SujetForum findByTitle(String s) {
		return sujetForumRepository.findByTitle(s);
	}

	@Override
	public SujetForum findById(Integer i) {
		return sujetForumRepository.findById(i);
	}

	@Override
	public void updateSujet(SujetForum s) {
		sujetForumRepository.save(s);		
	}

	@Override
	public void deleteSujet(SujetForum s) {
		List<ResponseForum> lst = responseForumService.getListResponses(s);
		for(ResponseForum r: lst){
			responseForumService.deleteReponse(r);
		}
		sujetForumRepository.delete(s);		
	}
}
